/**
 * Proyecto: Cognitum
 * Global IT Services 2008
 * @author Mislas
 */

Cognitum.Aplicacion.Seguridad.Permiso.Entity = function (){
	if (LOG.isDebugEnabled()) {
		LOG.debug('[Permiso.Entity.ctor] <-');
	}
	Cognitum.Aplicacion.Seguridad.Permiso.Entity.superclass.constructor.call(this, false, true);
}

Ext.extend(Cognitum.Aplicacion.Seguridad.Permiso.Entity, Karma.Core.Entity, {
	id: 'Permiso.Entity',
	name: 'Permiso',
	columns: [
		{ Name: 'Id', Property: 'Id', Mostrar: false},
		{ Name: 'Modulo', Property: 'Modulo.Nombre', Mostrar: false },
		{ Name: 'Entidad', Property: 'Nombre' },
		{ Name: 'Abrir', Property: 'Open', Tipo: 'logico' },
		{ Name: 'Nuevo', Property: 'New', Tipo: 'logico' },
		{ Name: 'Actualizar', Property: 'Update', Tipo: 'logico' },
		{ Name: 'Buscar', Property: 'Find', Tipo: 'logico' },
		{ Name: 'Eliminar', Property: 'Delete', Tipo: 'logico' },
		{ Name: 'Imprimir', Property: 'Print', Tipo: 'logico' },
		{ Name: 'Exportar', Property: 'Export', Tipo: 'logico' }
	],
	searchlist: {
		sortings: [ 'Modulo.Nombre'],
		views: [
			{ Id: 0, Nombre: 'Normal', Template: null },
			{ Id: 1, Nombre: 'Expandida', Template: null }
		],
		previewTemplate: null
	},
	aggregatelist: {
		grouping : true,
		gridH: 390,
		selectionMode: 'check',
		groupField: 'Modulo.Nombre',
		setValue: function(v){
			if (PLOG.isDebugEnabled()) {
				PLOG.debug('[Permiso.setValue] <-');
			}
			this.originalData = v;
			var permisos = new Array();
			Ext.each(v, function(modulo, idx){
				if (PLOG.isDebugEnabled()) {
					PLOG.debug('[Permiso.setValue] Modulo: ' + modulo.Nombre);
				}
				Ext.each(modulo.Entidades, function(entidad, idx){
					if (PLOG.isDebugEnabled()) {
						PLOG.debug('[Permiso.setValue] Entidad: ' + entidad.Nombre);
					}
					entidad.Modulo = modulo;
					permisos.push(entidad);
				}, this);
			}, this);
			this.value = permisos;
			this.gridStore.loadData({
				Data: this.value
			});
			if (PLOG.isDebugEnabled()) {
				PLOG.debug('[Permiso.setValue] ->');
			}
		},
		getValue: function(){
			if (PLOG.isDebugEnabled()) {
				PLOG.debug('[Permiso.getValue] <-');
			}
			var modified = this.gridStore.getModifiedRecords();
			if (PLOG.isDebugEnabled()) {
				PLOG.debug('[Permiso.getValue] Modified records: ' + modified.length);
			}
			Ext.each(modified, function(record){
				var id = record.get('Id');
				var entidad = this.getEntidad(id);
				Ext.each(this.columns, function(column){
					entidad[column.Property] = record.data[column.Property];
				}, this);
				//delete this.value[idx].Modulo;
				entidad.Modulo = null;
			}, this);
			Ext.each(this.originalData, function(modulo, idx){
				Ext.each(modulo.Entidades, function(entidad, idx){
					entidad.Modulo = {};
					delete entidad.Modulo;
				}, this);
			}, this);
			if (PLOG.isDebugEnabled()) {
				PLOG.debug('[Permiso.getValue] ->');
			}
			this.gridStore.commitChanges();
			return this.originalData;
		},
		getEntidad: function(entidadId){
			for(var idx = 0; idx < this.originalData.lenght; idx++){
				var modulo = this.originalData[idx];
				for(var eidx = 0; eidx < modulo.Entidades.lenght; eidx++){
					var entidad = modulo.Entidades[eidx];
					if(entidad.Id == entidadId){
						return entidad;
					}
				}
			}
		},
		getGridControls: function(){
			return [];
		},
		getTBarControls: function(){
			return [];
		},
		getBbarControls: function(){
			return [];
		},
		getMenuActions: function(){
			return [];
		},
		specification: function(){
			return [];
		}
	}
});

Cognitum.Permisos = Cognitum.Aplicacion.Seguridad.Permiso.Entity;